package com.bawei.mall.product.mapper;

import com.bawei.mall.product.domain.MallAdvertiseInfo;
import com.bawei.mall.product.domain.MallNewProduct;
import com.bawei.mall.product.domain.MallUserAddress;
import com.bawei.mall.product.domain.ProductBrand;
import com.bawei.mall.product.domain.model.*;
import com.bawei.mall.user.domain.MallUserFootprint;
import io.swagger.models.auth.In;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;

import java.util.List;

/**
 * @Author：张余庆
 * @Package：com.bawei.mall.product.mapper
 * @Project：mall_cloud
 * @name：MallProductMapper
 * @Date：2024/6/21 11:58
 */
public interface MallProductMapper {
    /**
     * 功能：查询商品品牌列表
     * @return
     */
    List<ProductBrand> selBrandList();

    /**
     * 功能：根据品牌id查询商品
     * @param brandId
     * @return
     */
    List<MallNewProduct> selProduct(@Param("brandId") Integer brandId,
                                    @Param("pageNum") Integer pageNum,
                                    @Param("pageSize") Integer pageSize);

    /**
     * 功能：根据id查询品牌
     * @return
     */
    ProductBrand selBrandById(Integer id);

    /**
     * 功能：商品推荐广告查询
     * @return
     */
    List<MallAdvertiseInfo> selGaoList();

    /**
     * 功能：商品收藏
     * @param mallUserFollow
     * @return
     */
    Integer add(MallUserFollow mallUserFollow);

    /**
     * 功能：取消商品收藏
     * @param brandId
     * @return
     */
    Integer delete(@Param("brandId") Integer brandId, @Param("userId") Long userId);

    /**
     * 功能：查询用户地址
     * @param userId
     * @return
     */
    List<MallUserAddress> userAddress(Long userId);

    /**
     * 功能：用户地址回显
     * @param id
     * @param userId
     * @return
     */
    MallUserAddress address(@Param("id") Integer id, @Param("userId") Long userId);

    /**
     * 功能：编辑用户地址
     * @param address
     * @return
     */
    Integer updateAddress(MallUserAddress address);

    /**
     * 功能：删除用户地址
     * @param userId
     * @param id
     * @return
     */
    Integer delAddress(@Param("userId") Long userId, @Param("id") Integer id);

    /**
     * 功能：添加用户地址
     * @param address
     * @return
     */
    Integer addAddress(MallUserAddress address);

    /**
     * 功能：添加广告表
     * @param advertiseInfo
     * @return
     */
    Integer addAdvertise(MallAdvertiseInfo advertiseInfo);

    /**
     * 功能：修改广告表
     * @param advertiseInfo
     * @return
     */
    Integer updateAdvertise(MallAdvertiseInfo advertiseInfo);

    /**
     * 功能：删除广告
     * @param id
     * @return
     */
    Integer delAdvertise(Integer id);

    /**
     * 功能：查询广告
     * @param id
     * @return
     */
    MallAdvertiseInfo selAdvertise(Integer id);

    /**
     * 功能：查询新品
     * @return
     */
    List<MallNewProduct> selNewProduct();

    /**
     * 功能：查询推荐商品
     * @return
     */
    List<MallNewProduct> selCommentProduct();

    /**
     * 功能：查询用户足迹表
     * @return
     */
    List<MallUserFootprint> list(@Param("userId") Long userId,
                                 @Param("pageSize") Integer pageSize,
                                 @Param("pageNum") Integer pageNum);

    /**
     * 功能：删除用户足迹
     * @param userId
     * @return
     */
    Integer delFootprint(Long userId);

    /**
     * 功能：添加用户足迹
     * @param mallUserFootprint
     * @return
     */
    Integer addFootprint(MallUserFootprint mallUserFootprint);

    /**
     * 根据ID查询商品
     * @param id
     * @return
     */
    MallNewProduct selProductById(Integer id);

    /**
     * 功能：根据关键字查询商品
     * @param keywords
     * @return
     */
    List<MallNewProduct> selProductList(@Param("keywords") String keywords,
                                        @Param("pageSize") Integer pageSize,
                                        @Param("pageNum") Integer pageNum);

    /**
     * 根据商品id查询品牌
     * @param brandId
     * @return
     */
    ProductBrand selBrandBbrandId(Integer brandId);


    /**
     * 功能：查询用户关注表
     * @param userId
     * @param pageNum
     * @param pageSize
     * @return
     */
    List<MallUserFollow> getUserFollow(@Param("userId") Long userId,
                                       @Param("pageNum") Integer pageNum,
                                       @Param("pageSize") Integer pageSize);

    /**
     * 功能：清空用户关注
     * @param userId
     * @return
     */
    Integer clear(Long userId);

    /**
     * 根据商品属性分类ID 查询商品属性
     * @param productAttributeCategoryId
     * @return
     */
    List<MallProductAttriSku> getAattriSkus(Integer productAttributeCategoryId);

    List<MallProductValue> getValueList(Integer skusId);

    List<MallProductStock> getStockList(Integer productId);

    List<MallProductPrice> getPriceList(Integer skusId);
}
